package com.rj.ability.leqi.adapter.domain.aisino;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.rj.ability.leqi.req.BdcxstdysData;
import com.rj.core.constant.DigitsEnum;
import com.rj.core.constant.RegexpPool;
import com.rj.core.validation.constraints.DigitsField;
import com.rj.core.validation.constraints.StringField;
import com.rj.util.AssertUtils;
import com.rj.util.ValidationUtils;
import com.rj.util.VerifyUtils;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

/**
 * 不动产销售信息
 *
 * @author YFX_RANLUBO
 * @date 2024/04/30 15:42
 **/
@Data
@AutoMapper(target = BdcxstdysData.class, reverseConvertGenerate = false)
public class AisinoBdcxstdysData {
    /**
     * 序号 varchar 8 是
     */
    @JsonProperty("id")
    @DigitsField(value = "序号", maxInteger = 8, maxFraction = 0, digitsEnum = DigitsEnum.POSITIVE)
    private String xh;
    /**
     * 不动产单位代码 varchar 28 否 “不动产单位代码”和“网签合同备案编号”两者只能填一个
     */
    @JsonProperty("realEstateUnitCode")
    @StringField(value = "不动产单位代码", maxLen = 28)
    private String bdcdwdm;
    /**
     * 网签合同备案编号 varchar 28 否 “不动产单位代码”和“网签合同备案编号”两者只能填一个
     */
    @JsonProperty("onlineSigningContractNumber")
    @StringField(value = "网签合同备案编号", maxLen = 28)
    private String wqhtbabh;
    /**
     * 不动产坐落地址（省） varchar 20 是 必须以省、自 治区、特别行 政区、北京市、 天津市、上海 市、重庆市任 意一个关键词 结尾。 当红冲不动产 坐落地址未修 改为三个字段 的蓝票时，如 果蓝票不动产 坐落地址没有 填写省（直辖 市、自治区、 特别行政区）， 该字段可不填 写。
     */
    @JsonProperty("realEstateAddressProvince")
    @StringField(value = "不动产坐落地址（省）", maxLen = 20, empty = false, regexp = RegexpPool.DZ_PROVINCE)
    private String bdczldzS;
    /**
     * 不动产坐落地址 （市） varchar 20 否 必须以市、盟、 自治州、地区、 区任意一个关 键词结尾。
     */
    @JsonProperty("realEstateAddressCity")
    @StringField(value = "不动产坐落地址（市）", maxLen = 20, regexp = RegexpPool.DZ_CITY)
    private String bdczldzS1;
    /**
     * 不动产坐落地址 （详细地址） varchar 80 是 必须包含街、 路、村、乡、 镇、道、巷、 号任意一个关 键词。
     */
    @JsonProperty("realEstateAddress")
    @StringField(value = "不动产坐落地址（详细地址）", maxLen = 80, empty = false, regexp = RegexpPool.DZ_CUN)
    private String bdczldzXxdz;
    /**
     * 土地增值税项目编号 varchar 16 否
     */
    @JsonProperty("landValueTaxItemNumber")
    @StringField(value = "土地增值税项目编号", maxLen = 16)
    private String tdzzsxmbh;
    /**
     * 跨地（市）标志 varchar 1 是
     * Y 是 N 否
     */
    @StringField(value = "跨地（市）标志", maxLen = 1, empty = false, dict = {"Y", "N"})
    @JsonProperty("crossRegionalSign")
    private String kdsbz;
    /**
     * 核定计税价格 number 18,2 否
     * 不属于核定计税不动产销售的可不填写
     */
    @JsonProperty("approvedTaxablePrice")
    @DigitsField(value = "核定计税价格", maxInteger = 18, maxFraction = 2)
    private String hdjsjg;
    /**
     * 实际成交含税金 额 number 18,2 否
     * 若按核定计税价格征税的为必填。
     */
    @JsonProperty("actualTransactionAmount")
    @DigitsField(value = "实际成交含税金额", maxInteger = 18, maxFraction = 2)
    private String sjcjhsje;
    /**
     * 产权证书/不动产权证号 varchar 40 否
     */
    @JsonProperty("propertyRightCertificate")
    @StringField(value = "产权证书/不动产权证号", maxLen = 40)
    private String cqzsbh;

    public void check() {
        AssertUtils.validation(this);
        AssertUtils.isTrue(VerifyUtils.isEmpty(bdcdwdm) == VerifyUtils.isEmpty(wqhtbabh),
                "不动产单位代码和网签合同备案编号两者只能填一个");
        if (VerifyUtils.notEmpty(hdjsjg)) {
            AssertUtils.notNull("核定计税价格不为空时,实际成交含税金额", sjcjhsje);
        }

    }
}
